package chapitre13;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.GridLayout;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class MySpinner extends JFrame {
    /** <p>Serial version UID.</p> */
    private static final long serialVersionUID = 1L;
    
    private JSpinner spinnerR;
    private JSpinner spinnerV;
    private JSpinner spinnerB;
    private JColorComponent couleurComponent;
    
    public MySpinner() {
        super("MySpinner");
    
        SpinnerNumberModel colorSpinnerModelR = new SpinnerNumberModel(128, 0, 255, 1);
        SpinnerNumberModel colorSpinnerModelV = new SpinnerNumberModel(128, 0, 255, 1);
        SpinnerNumberModel colorSpinnerModelB = new SpinnerNumberModel(128, 0, 255, 1);
        spinnerR = new JSpinner(colorSpinnerModelR);
        spinnerV = new JSpinner(colorSpinnerModelV);
        spinnerB = new JSpinner(colorSpinnerModelB);
        
        JPanel panneau = new JPanel();
        panneau.setLayout(new GridLayout(3, 1));
        panneau.add(spinnerR);
        panneau.add(spinnerV);
        panneau.add(spinnerB);
        
        couleurComponent = new JColorComponent(new Color((Integer) spinnerR.getValue(), 
                (Integer) spinnerV.getValue(), (Integer) spinnerB.getValue()));
        
        getContentPane().setLayout(new BorderLayout());
        getContentPane().add(panneau, BorderLayout.WEST);
        getContentPane().add(couleurComponent, BorderLayout.CENTER);
        
        spinnerR.addChangeListener(new ChangeListener() {

            @Override
            public void stateChanged(ChangeEvent e) {
                couleurComponent.setR((Integer) spinnerR.getValue());
            }
            
        });
        
        spinnerV.addChangeListener(new ChangeListener() {

            @Override
            public void stateChanged(ChangeEvent e) {
                couleurComponent.setV((Integer) spinnerV.getValue());
            }
            
        });
        
        spinnerB.addChangeListener(new ChangeListener() {

            @Override
            public void stateChanged(ChangeEvent e) {
                couleurComponent.setB((Integer) spinnerB.getValue());
            }
            
        });
        
        // Propriétés de la fenêtre.
        setLocation(50, 50);
        setSize(400, 280);
        setVisible(true);
        setResizable(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    
    private class JColorComponent extends JComponent {
        private Color couleur;
        
        public JColorComponent(Color c) {
            couleur = c;
        }
        public void paint(Graphics g) {
            g.setColor(couleur);
            g.fillRect(10, 10, 150, 150);
        }
        
        public void setR(int r) {
            couleur = new Color(r, couleur.getGreen(), couleur.getBlue());
            repaint();
        }
        
        public void setV(int v) {
            couleur = new Color(couleur.getRed(), v, couleur.getBlue());
            repaint();
        }
        
        public void setB(int b) {
            couleur = new Color(couleur.getRed(), couleur.getGreen(), b);
            repaint();
        }
    }
    
    /**
     * <p>Débute l'exécution du programme.</p>
     * @param args Les paramètres de la ligne de commande.
     */
    public static void main(String[] args)
    {
        new MySpinner();
    }
}
